package enumAndAnnotation;

/**
 * 注解Override
 */
public class Override_ {

    public static void main(String[] args) {

        /*
            注解也被称为元数据，用于修饰解释 包、类、方法、属性、构造器、局部变量等数据信息
            和注释一样，注解不影响程序逻辑，但注解可以被编译或运行，相当于嵌入在代码中的补充信息

            三个基本的Annotation：
            1)@Override：限定某个方法，是重写父类方法，该注解只能用于方法
            2)@Deprecated：用于表示某个程序元素
            3)@SuppressWarnings：抑制编译器警告
         */
    }
}

class Father { //父类

    public void fly(){
        System.out.println("Father fly...");
    }
    public void say(){}
}

class Son extends Father {

    /*
        1) @Override 注解放在 fly 方法上，表示子类的fly方法时重写了父类的fly
        2) 这里如果没有写 @Override 还是重写了父类fly
        3) 如果你写了@Override 注解，编译器就会去检查该方法是否真的重写了父类的方法，如果的确重写了，则编译通过，如果没有构成重写，则编译错误

        4) @Override定义：
            @Target(ElementType.METHOD) //说明只能修饰方法
            @Retention(RetentionPolicy.SOURCE)
            public @interface Override {
            }
           @Target 是修饰注解的注解，称为元注解
     */

    @Override
    //说明
    public void fly() {
        System.out.println("Son fly....");
    }

    @Override
    public void say() {
        super.say();
    }
}
